﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using modelo;
using System.Collections;
using Intermediario;

namespace negocio
{
    public class CitaBO
    {
        public void actualizarCitaPorAsignador(decimal idCita, int idAsignador, DateTime fechaCita)
        {
            notariaEntities contexto = new notariaEntities();
            
            
            CITA CITATmp = contexto.CITA.Where(C => C.IDCITA == idCita).FirstOrDefault();
            CITATmp.IDASIGNADOR = idAsignador;
            CITATmp.FECHACITA = fechaCita;
            CITATmp.IDESTADO = getEstadoPorCodigo("A").IDESTADO;

            contexto.SaveChanges();
            contexto.Dispose();
        }

        public void actualizarCitaPorFuncionario(decimal idCita, int idFuncionario, String observacionesFuncionario, String docAnexados)
        {
            notariaEntities contexto = new notariaEntities();
            CITA CITATmp = contexto.CITA.Where(C => C.IDCITA == idCita).FirstOrDefault();
            CITATmp.IDFUNCIONARIO = idFuncionario;
            CITATmp.OBSERVACIONFUNCIONARIO = observacionesFuncionario;
            CITATmp.DOCSANEXADOS = docAnexados;
            CITATmp.IDESTADO = getEstadoPorCodigo("EA").IDESTADO;

            contexto.SaveChanges();
            contexto.Dispose();
        }

        public void actualizarCitaPorNotario(decimal idCita,String observacionesNotario)
        {
            notariaEntities contexto = new notariaEntities();
            CITA CITATmp = contexto.CITA.Where(C => C.IDCITA == idCita).FirstOrDefault();
            CITATmp.OBSERVACIONNOTARIO = observacionesNotario;
            CITATmp.IDESTADO = getEstadoPorCodigo("AP").IDESTADO;

            contexto.SaveChanges();
            contexto.Dispose();
        }

        public void actualizarCitaPorLiquidador(decimal idCita, int idLiquidador, String observacionesLiquidador)
        {
            notariaEntities contexto = new notariaEntities();
            CITA CITATmp = contexto.CITA.Where(C => C.IDCITA == idCita).FirstOrDefault();
            CITATmp.IDLIQUIDADOR = idLiquidador;
            CITATmp.OBSERVACIONLIQUIDADOR = observacionesLiquidador;
            CITATmp.IDESTADO = getEstadoPorCodigo("L").IDESTADO;

            contexto.SaveChanges();
            contexto.Dispose();
        }


        public ArrayList listarCitas(int opcion, int idNotaria)
        {
            notariaEntities contexto = new notariaEntities();
            List<Cita> lista = new List<Cita>();
            decimal idEstado=0;


            
            switch (opcion)
            {
                case 1:
                    //por agendar
                    idEstado = getEstadoPorCodigo("PA").IDESTADO;
                    break;
                case 2:
                    //AGENDADO
                    idEstado = getEstadoPorCodigo("A").IDESTADO;
                    break;
                case 3:
                    //ESPERANDO APROBACION
                    idEstado = getEstadoPorCodigo("EA").IDESTADO;
                    break;
                case 4:
                    //APROBADO
                    idEstado = getEstadoPorCodigo("AP").IDESTADO;
                    break;
                case 5:
                    //LIQUIDADO
                    idEstado = getEstadoPorCodigo("L").IDESTADO;
                    break;
            }
            Console.WriteLine(idEstado + " " + opcion);
            
            lista = (from C in contexto.CITA
                     select new Cita()
                     {
                         IdCita =(int) C.IDCITA,
                         
                         NombreSol = C.SOLICITANTE.NOMBRES,
                         NombreNota = C.NOTARIA.RAZONSOCIAL,

                         NombreTramite = C.TIPO_TRAMITE.DESCRIPCION,
                         IdSolicitante = C.IDSOLICITANTE==null ? 0 : (int) C.IDSOLICITANTE,
                         IdNotaria = C.IDNOTARIA==null ? 0 : (int) C.IDNOTARIA,
                         IdLiquidador =  C.IDLIQUIDADOR==null ? 0 : (int) C.IDLIQUIDADOR,
                         IdFuncionario =  C.IDFUNCIONARIO==null ? 0 : (int) C.IDFUNCIONARIO,
                         TipoTramite = C.IDTIPOTRAMITE==null ? 0 : (int) C.IDTIPOTRAMITE,
                         IdEstado = C.IDESTADO==null ? 0 : (int) C.IDESTADO,
                         IdAsignador = C.IDASIGNADOR == null ? 0 : (int)C.IDASIGNADOR,
                         FechaCita = C.FECHACITA == null ? new DateTime() : (DateTime)C.FECHACITA,
                         ObservacionFunc = C.OBSERVACIONFUNCIONARIO,
                         ObsevacionNota = C.OBSERVACIONNOTARIO,
                         ObservacionLiquidador = C.OBSERVACIONLIQUIDADOR,
                         DocsAnexos = C.DOCSANEXADOS
                     }).Where(C => C.IdEstado == idEstado & C.IdNotaria == idNotaria).ToList();

            //lista = contexto.CITA.Where(C => C.IDESTADO == idEstado & C.IDNOTARIA == idNotaria).ToList();
            contexto.Dispose();


            ArrayList list = new ArrayList();
            foreach (var item in lista)
            {
                Cita cita = new Cita();

                list.Add(item);
            }
            return list;
        }


        private ESTADO getEstadoPorCodigo(String codigo)
        {
            notariaEntities contexto = new notariaEntities();
            ESTADO ESTADOTmp = contexto.ESTADO.Where(E => E.CODIGO == codigo).FirstOrDefault();
            contexto.Dispose();

            return ESTADOTmp;
        }
    }
}
